/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package heraclito;

import br.org.Cliente.FipaMessage;
import br.org.Cliente.SendMessageToAgentResponse;
import br.org.Cliente.WSAgent;
import br.org.Cliente.WSAgentService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Response;

/**
 *
 * @author Marcel
 */
public class WS2FIPAGateway {

    private static WSAgent port;
    private static String username;
    private static String password;
    private static String resposta;

    public static boolean login2(String user, String pass) {
        username = user;
        password = pass;
        WSAgentService service = new WSAgentService();
        port = service.getWSAgentPort();
        resposta = port.performLogin2(username, password, "");
        System.out.println("Resposta é: " + resposta);
        return !resposta.contains("Erro");

    }
    
    public static void logoff(){
        port.performLogoff(username);
        username = null;
    }
    
    public static void sendMessageAsync(String content, final Edicao edicao) {
        WSAgentService service = new WSAgentService();
        port = service.getWSAgentPort();
        FipaMessage fipaMessage = new FipaMessage();//cria uma nova mensagem fipa
        fipaMessage.setUserId(username);
        fipaMessage.setPerformative(7);
        fipaMessage.setAgentTo("perfilaluno");//nome do agente que receberá a mensagem
        fipaMessage.setContent(content);//mensagem com a informção desejada
        AsyncHandler<SendMessageToAgentResponse> handler = new AsyncHandler<SendMessageToAgentResponse>() {

            public void handleResponse(Response<SendMessageToAgentResponse> res) {
                try {
                    resposta = res.get().getReturn();
                    this.testMessageFromAgent(resposta);
                } catch (InterruptedException ex) {
                    Logger.getLogger(WS2FIPAGateway.class.getName()).log(Level.SEVERE, null, ex);
                } catch (ExecutionException ex) {
                    Logger.getLogger(WS2FIPAGateway.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

            private void testMessageFromAgent(String msg) {
                String aux = corrigeAcentos(msg.substring(msg.indexOf("(") + 1, msg.lastIndexOf(",")));
                if (msg.contains("verifica_ajuda") || msg.contains("informar") || msg.contains("diag_hipotese")) {
                    edicao.escreveParaUsuario(aux);
                } else if (msg.contains("sugerir_exemplo")) {
                    edicao.ofereceExemplos(aux);
                } else if (msg.contains("diag_prova")) {
                    if (aux.contains("prejudicial")) {
                        JOptionPane.showMessageDialog(null, aux);
                    } else {
                        edicao.escreveParaUsuario(aux);
                    }
                } else if (msg.contains("solic_ajuda")) {
                    JOptionPane.showConfirmDialog(null, aux, "", JOptionPane.YES_NO_OPTION);
                } else if (msg.contains("novo_argumento")) {
                    edicao.formataResolucaoProvador(msg.substring(msg.indexOf(".,") + 2, msg.lastIndexOf(",")));
                }
                System.out.println(msg);
            }
            
//            -------------------------------------------------------------------
            private String corrigeAcentos(String msg) {
			if (msg.contains("voce")) {
				msg.replace("voce", "você");
			}
			
			else if (msg.contains("Parabens")) {
				msg = "Parabéns, está no caminho certo.";
			} 
			
			else if (msg.contains("pois nao contribui para a resolucao")) {
				msg = "Esta regra é considerada redundante, pois não contribui para a resolução.";
			}
			
			else if (msg.contains("prejudicial")) {
				msg = "Essa regra é considerada prejudicial, pois irá impedir o término do seu exercício. Por favor desfaça a sua ação.";
			}
			
			else if (msg.contains("ainda")) {
				msg = "Verifiquei que você ainda não informou todas as hipóteses. Deseja verificar um exemplo da definição das hipóteses?";
			}
			
			else if (msg.contains("ja informaste")) {
				msg = "Verifiquei que você já informou todas as hipóteses. Deseja verificar um exemplo da aplicação das regras?";
			}
			
			else if (msg.contains("Gostaria de analisar um exemplo?")) {
				msg = "Verifiquei que você aplicou uma regra redundante. Gostaria de analisar um exemplo?";
			}
                        return msg;
			
		}
            
            
//            -------------------------------------------------------------------
            
        };

        Future resultado = port.sendMessageToAgentAsync(fipaMessage, handler);
    }

    public static String getPassword() {
        return password;
    }

    public static void setPassword(String password) {
        WS2FIPAGateway.password = password;
    }

    public static String getResposta() {
        return resposta;
    }

    public static void setResposta(String resposta) {
        WS2FIPAGateway.resposta = resposta;
    }
    
    public static String getUsername() {
        return username;
    }

    public WSAgent getPort() {
        return port;
    }
}
